package main

import (
	"github.com/golang/protobuf/proto"
	"github.com/golang/protobuf/protoc-gen-go/generator"
	_ "goland-study/go_code/go_advanced_programming/rpc_protobuf"
	"io/ioutil"
	"os"
)

// 自定义插件不能使用省略命令,这是全部命令
// protoc --go-netrpc_out=plugins=netrpc:. hello.proto
// build命令: go build -o protoc-gen-go-netrpc.exe .\main.go
func main() {
	g := generator.New()

	// 可以用于从命令行接收输入数据
	data, err := ioutil.ReadAll(os.Stdin)
	if err != nil {
		g.Error(err, "reading input")
	}

	if err = proto.Unmarshal(data, g.Request); err != nil {
		g.Error(err, "parsing input proto")
	}

	if len(g.Request.GetParameter()) == 0 {
		g.Fail("no files to generate")
	}

	g.CommandLineParameters(g.Request.GetParameter())

	// 创建 Descriptors 和 EnumDescriptors 的封装版本
	// 指向定义它们的文件。
	g.WrapTypes()

	g.SetPackageNames()
	g.BuildTypeNameMap()

	g.GenerateAllFiles()

	marshal, err := proto.Marshal(g.Response)
	if err != nil {
		g.Error(err, "failed to marshal output proto")
	}

	_, err = os.Stdout.Write(marshal)
	if err != nil {
		g.Error(err, "failed to write output proto")
	}
}
